/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package LogicaNegocio.Controlador;

import AccesoDatos.Persistencia.Manager.ManagerUsuario;
import GUI.Bibliotecario.AdminUsuarios.PanelRegistrarUsuario;
import LogicaNegocio.Usuarios.Docente;
import LogicaNegocio.Usuarios.Estudiante;
import LogicaNegocio.Usuarios.Usuario;
import LogicaNegocio.Validacion.VUsuario;
import javax.persistence.EntityExistsException;
import javax.persistence.RollbackException;
import javax.swing.JOptionPane;

/**
 * Esta clase en java permite el control de eventos
 * para el registro de usuarios en el sistema.
 *
 * @author sebaxtian
 * Archivo: ControlRegistrarUsuario.java
 * @version 1.0
 * Fecha: lun may 10 17:34:43 COT 2010
 */


public class ControlRegistrarUsuario {

    //Atributos de clase
    private PanelRegistrarUsuario panelRegistrar;
    private ManagerUsuario gestorUsuario;


    public ControlRegistrarUsuario(PanelRegistrarUsuario panelRegistrar) {
        this.panelRegistrar = panelRegistrar;
        gestorUsuario = new ManagerUsuario();
        registrar();
    }

    private void registrar() {
        try {
            //los usuarios tienen un perfil
            Docente docente = new Docente();
            Estudiante estudiante = new Estudiante();
            //realiza el registro
            if(panelRegistrar.radioDocente.isSelected()){
                realizarRegistro(docente);
            }
            if(panelRegistrar.radioEstudiante.isSelected()){
                realizarRegistro(estudiante);
            }
            //si no ocurren excepciones
            JOptionPane.showMessageDialog(panelRegistrar, "El Usuario ha sido registrado con exito", "Registro", JOptionPane.PLAIN_MESSAGE);
        } catch(NumberFormatException ex) {
            JOptionPane.showMessageDialog(panelRegistrar, "El campo numero de cedula solo debe contener un valor numerico", "Numero Cedula", JOptionPane.ERROR_MESSAGE);
        } catch (EntityExistsException ex) {
            JOptionPane.showMessageDialog(panelRegistrar, "Ya existe un usuario con cedula "+panelRegistrar.textFieldCedula.getText(), "Error Codigo", JOptionPane.INFORMATION_MESSAGE);
        } catch (RollbackException ex) {
            JOptionPane.showMessageDialog(panelRegistrar, "Ya existe un usuari con codigo "+panelRegistrar.textFieldCedula.getText(), "Error Codigo", JOptionPane.INFORMATION_MESSAGE);
        } catch (VUsuario ex) {
            JOptionPane.showMessageDialog(panelRegistrar, ex.getMessage(), "Error Registro", JOptionPane.INFORMATION_MESSAGE);
        }
    }

    private void realizarRegistro(Usuario usuario) throws VUsuario, RollbackException, EntityExistsException {
        //se cambian los datos del usuario con las que se ingresan en el formulario
        usuario.setActivo(true);
        usuario.setDireccion(panelRegistrar.textFieldDireccion.getText());
        usuario.setEmail(panelRegistrar.textFieldEmail.getText());
        usuario.setIdentificacionUsuario(Integer.parseInt(panelRegistrar.textFieldCedula.getText()));
        usuario.setPrimerApellido(panelRegistrar.textFieldPrimerApellido.getText());
        usuario.setPrimerNombre(panelRegistrar.textFieldPrimerNombre.getText());
        usuario.setSegundoApellido(panelRegistrar.textFieldSegundoApellido.getText());
        usuario.setSegundoNombre(panelRegistrar.textFieldSegundoNombre.getText());
        usuario.setTelefono(panelRegistrar.textFieldTelefono.getText());
        //persiste el usuario
        if(usuario.getClass() == Docente.class){
            Docente docente = (Docente)usuario;
            docente.setAreasInteres(panelRegistrar.textAreaIntereses.getText());
            docente.setDependencia(panelRegistrar.textFieldDependencia.getText());
            docente.setTitulo(panelRegistrar.textFieldTitulo.getText());
            //se valida el usuario docente
            new VUsuario(docente);
        }
        if(usuario.getClass() == Estudiante.class){
            Estudiante estudiante = (Estudiante)usuario;
            estudiante.setCarrera(panelRegistrar.textFieldCarrera.getText());
            estudiante.setUniversidad(panelRegistrar.textFieldUniversidad.getText());
            //se valida el usuario estudiante
            new VUsuario(estudiante);
        }
        //envia el objeto usuario para su persistencia
        gestorUsuario.crearUsuario(usuario);
        //Si no ocurren excepciones limpia los campos de texto
        panelRegistrar.textAreaIntereses.setText("");
        panelRegistrar.textFieldCarrera.setText("");
        panelRegistrar.textFieldCedula.setText("");
        panelRegistrar.textFieldDependencia.setText("");
        panelRegistrar.textFieldDireccion.setText("");
        panelRegistrar.textFieldEmail.setText("");
        panelRegistrar.textFieldPrimerApellido.setText("");
        panelRegistrar.textFieldPrimerNombre.setText("");
        panelRegistrar.textFieldSegundoApellido.setText("");
        panelRegistrar.textFieldSegundoNombre.setText("");
        panelRegistrar.textFieldTelefono.setText("");
        panelRegistrar.textFieldTitulo.setText("");
        panelRegistrar.textFieldUniversidad.setText("");
    }
}
